package parser.simbolo;

import java.util.ArrayList;
import java.util.List;

import parser.FunctionSyntacticException;
import FilesManagers.CantOpenFileException;
import Filters.FullFilter;
import parser.ParserConsulta;
import parser.consulta.*;
import parser.simbolo.delimitador.*;
import parser.simbolo.operador.*;
import structuresManagers.BplusTreeManager;

public class Pruebas {
	private static String arbolFile ="arbol.txt";
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Apéndice de método generado automáticamente
		/*ArrayList<String> a = new ArrayList<String>();
		ArrayList<String> b = new ArrayList<String>();
		
		a.add("http://www.clarin.com.ar");
		a.add("http://www.lavidaesbella.com");
		a.add("http://www.zzz.com.ar");
		
		b.add("http://www.clarin.com.ar");
		b.add("http://www.matute.com.br");
		b.add("http://www.saltamonte.com");
		b.add("http://www.gimonte.com.ar");
		b.add("http://www.lavidaesbella.com");
		b.add("http://www.elpayasomalaonda.com");
		b.add("http://www.zzz.com.ar");
		b.add("http://www.comoconectarsealsvn.com/jimena");
		Comparator cp = new ComparadorUrls();
		Iterator<String> it;
		Operador op;
		List<String> res;
		
		op = new Not();
		op.setComparador(cp);
		res = op.operar(a, b);
		it =res.iterator();
		System.out.println();
		System.out.println("Operacion Not");
		System.out.println("*************");
		while(it.hasNext()){
			System.out.println(it.next()+" ");
		}
		System.out.println();
		
		op = new Or();
		op.setComparador(cp);
		res = op.operar(a, b);
		it =res.iterator();
		System.out.println();
		System.out.println("Operacion Or");
		System.out.println("*************");
		while(it.hasNext()){
			System.out.println(it.next()+" ");
		}
		System.out.println();
		
		op = new And();
		op.setComparador(cp);
		res = op.operar(a, b);
		it =res.iterator();
		System.out.println();
		System.out.println("Operacion And");
		System.out.println("*************");
		while(it.hasNext()){
			System.out.println(it.next()+" ");
		}
		System.out.println(); */
		
		
		FullFilter filtro;
		try {
			filtro = new FullFilter("./conf/stopwords.conf","./conf/stemming.conf","./conf/badcharacters.txt");
		
			//IndexManager indexManager = new IndexManager("urls.txt",filtro);
			BplusTreeManager indexManager = new BplusTreeManager("urls.txt","urlIndexadas.txt",filtro);
			
			Consulta c;
			
//			c = new ConsultaCompuesta("temp/",indexManager,arbolFile);
//			c.setStringConsulta("(guido AND pablo) OR (servetto AND gambande)");
//			c.ejecutar();
//			System.out.println("Busca el resultado en "+c.getFileResultado());
//			
//			c = new ConsultaCompuesta("temp/",indexManager,arbolFile);
//			c.setStringConsulta("guido AND (python OR pablo)");
//			c.ejecutar();
//			System.out.println("Busca el resultado en "+c.getFileResultado());
//			
			String consultas[] = new String [10];
			consultas[0]= "python OR";
			consultas[1]="python OR ((NOT pablo( )) AND (NOT servetto))";			
			consultas[2]="gambande";
			consultas[3]="NOT servetto";
			consultas[4]="NOT gambande";
			consultas[5]="repeppepepepep";
			consultas[6]="python OR ((NOT pablo) AND (NOT servetto))";
			consultas[7]="NOT AND servetto";
			consultas[8]= "python (OR guido)";
			
			List<Operador> listaOperandos = new ArrayList<Operador>();
			listaOperandos.add(new Or());
			listaOperandos.add(new And());
			listaOperandos.add(new Not());
			
			List<Delimitador> listaDelimitadores = new ArrayList<Delimitador>();
			listaDelimitadores.add(new Parentesis1());
			listaDelimitadores.add(new Parentesis2());			
			
			
			for(int i=0; i<consultas.length;i++){
				if(consultas[i]!=null){
					String consulta = consultas[i];
					try{
						ParserConsulta.validarConsulta(consulta,listaOperandos,listaDelimitadores);
						c = new ConsultaCompuesta("temp/",indexManager,arbolFile);
						c.setStringConsulta(consulta);
						c.ejecutar();
						System.out.println("Busca el resultado de ->"+consulta+"<- en "+c.getFileResultado());
						//System.out.println();
					}catch(FunctionSyntacticException e){
						System.out.println(consulta+" -> "+e.getMessage());
						
					}
				}
			}			
			
			
			System.out.println("La idea es despues leer el archivo donde escribio la consulta para mostrar los resultados en pantalla");
			
		} catch (CantOpenFileException e) {
			// TODO Bloque catch generado automáticamente
			e.printStackTrace();
		}
		

	}

}
